package com.zhuangjie.coupon.pojo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.zhuangjie.coupon.enums.CouponType;
import com.zhuangjie.shop.vo.ShopDisplayInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Objects;

/**
 * 用于店铺券的展示（店铺可用券信息）
 * 注意：父类的属性不能被覆盖！！
 *
 * @author zhuangjie
 */
@Getter
@Setter
// ！！这里不要写@Data，因为会覆盖掉CouponKey中的hashCode与equals方法，将会导致去重失效！！
public class CouponCoreInfo extends CouponKey {
    @ApiModelProperty("优惠卷id")
    @TableField("id")
    private Long id;

    @ApiModelProperty("领取的用户id")
    @TableField("user_id")
    private Long userId;

    @ApiModelProperty("发行的类型（0平台卷、1店铺卷）")
    @TableField("issue_type")
    private Byte issueType;

    @ApiModelProperty("最低消费多少金额可用优惠券（门槛）")
    @TableField("threshold_amount")
    private BigDecimal thresholdAmount;

    @ApiModelProperty("优惠卷类型(0满减/无门槛卷/代金券，1折扣卷)")
    @TableField("type")
    private Byte type;

    /**
     * 如果是折扣率，那其实是0.01~9.99 如果要拿来算需要除于10
     */
    @ApiModelProperty("优惠卷值(根据type：抵扣金额 | 折扣率)")
    @TableField("par_value")
    private BigDecimal parValue;

    @ApiModelProperty("膨胀规则-为空不可膨胀{\"膨胀后金额\":概率值,...}（issue_type=0）")
    @TableField(value = "expansion_rule")
    private String expansionRule;

    /**
     * 下面三个属性用来判断菜品是否满足当前优惠券
     */
    @ApiModelProperty("适用类型（0:无适用限制 1:适用类别 2:适用商品）")
    @TableField("applicable_type")
    private Byte applicableType;

    @ApiModelProperty("适用逻辑（1:适用选择 2:不适用选择的）")
    @TableField("applicable_logic")
    private Byte applicableLogic;

    @ApiModelProperty("适用值（选择的类目ids或商品ids）")
    @TableField("applicable_values")
    private String applicableValues;

    @ApiModelProperty("店铺id（仅店铺卷，平台卷null）")
    @TableField("shop_id")
    private Long shopId;

    @ApiModelProperty("优惠卷名称")
    @TableField("name")
    private String name;

    @ApiModelProperty("描述信息（如规则描述）")
    @TableField("`describe`")
    private String describe;

    @ApiModelProperty("过期时间")
    @TableField("expiration_time")
    private LocalDateTime expirationTime;

    @ApiModelProperty("张数")
    private Integer count;

    /**
     * 店铺优惠券的店铺信息
     */
    private ShopDisplayInfo shopDisplayInfo;



    /**
     * 如果是折扣券，则返回真实的折扣率
     *
     * @return
     */
    public BigDecimal ifDiscountCouponParValue() {
        return Objects.equals(this.type, CouponType.DISCOUNT.getCode()) ? this.getParValue().divide(BigDecimal.valueOf(10)) : this.getParValue();
    }


}
